/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package com.wisnu.hibernate.controller;



import com.wisnu.hibernate.error.PtikException;
import com.wisnu.hibernate.model.PtikModel;
import com.wisnu.hibernate.view.PtikView;
import java.awt.HeadlessException;
import java.util.Date;
import javax.swing.JOptionPane;
import org.hibernate.HibernateException;

/**
 *
 * @author Wisnu Wardoyo
 */
public class PtikController {

    PtikModel model;

    public void setModel(PtikModel model) {
        this.model = model;
    }

    public void resetForm() {
        model.resetPtik();
    }

    public void insertPtik(PtikView view) {
        String nim = view.getTextNim().getText();
        String nama = view.getTextNama().getText();
        Date tanggalLahir = (Date) view.getTextTanggalLahir().getValue();
        String telepon = view.getTextTelepon().getText();
        String email = view.getTextEmail().getText();

        if (nim.trim().equals("")) {
            JOptionPane.showMessageDialog(view, "Nim masih kosong");
        } else if (nim.length() > 10) {
            JOptionPane.showMessageDialog(view, "Nim tidak boleh lebih dari 10 digit");
        } else if (nama.trim().equals("")) {
            JOptionPane.showMessageDialog(view, "Nim masih kosong");
        } else if (nama.length() > 255) {
            JOptionPane.showMessageDialog(view, "Nama tidak boleh lebih dari 255 karakter");
        } else if (tanggalLahir.compareTo(new Date()) >= 0) {
            JOptionPane.showMessageDialog(view, "Tanggal lahir tidak boleh lebih dari sekarang");
        } else if (telepon.length() > 14) {
            JOptionPane.showMessageDialog(view, "Telepon tidak boleh lebih dari 14 digit");
        } else if (!email.contains("@") && !email.contains(".")) {
            JOptionPane.showMessageDialog(view, "Email tidak valid");
        } else {
            model.setNim(nim);
            model.setNama(nama);
            model.setTanggalLahir(tanggalLahir);
            model.setTelepon(telepon);
            model.setEmail(email);
            try {
                model.insertPtik();
                JOptionPane.showMessageDialog(view, "Data berhasil ditambah");
                model.resetPtik();
            } catch (HibernateException | PtikException | HeadlessException throwable) {
                JOptionPane.showMessageDialog(view, new Object[]{
                    "Terjadi error pada database dengan pesan :",
                    throwable.getMessage()
                });
            } catch (Exception ex) {
                
            }
        }
    }

    public void updatePtik(PtikView view) {

        if (view.getTable().getSelectedRowCount() == 0) {
            JOptionPane.showMessageDialog(view, "Silahkan seleksi baris yang akan diubah");
            return;
        }

        Integer id = Integer.parseInt(view.getTextId().getText());
        String nim = view.getTextNim().getText();
        String nama = view.getTextNama().getText();
        Date tanggalLahir = (Date) view.getTextTanggalLahir().getValue();
        String telepon = view.getTextTelepon().getText();
        String email = view.getTextEmail().getText();

        if (nim.trim().equals("")) {
            JOptionPane.showMessageDialog(view, "Nim masih kosong");
        } else if (nim.length() > 10) {
            JOptionPane.showMessageDialog(view, "Nim tidak boleh lebih dari 10 digit");
        } else if (nama.trim().equals("")) {
            JOptionPane.showMessageDialog(view, "Nim masih kosong");
        } else if (nama.length() > 255) {
            JOptionPane.showMessageDialog(view, "Nama tidak boleh lebih dari 255 karakter");
        } else if (tanggalLahir.compareTo(new Date()) >= 0) {
            JOptionPane.showMessageDialog(view, "Tanggal lahir tidak boleh lebih dari sekarang");
        } else if (telepon.length() > 14) {
            JOptionPane.showMessageDialog(view, "Telepon tidak boleh lebih dari 14 digit");
        } else if (!email.contains("@") && !email.contains(".")) {
            JOptionPane.showMessageDialog(view, "Email tidak valid");
        } else {
            model.setId(id);
            model.setNim(nim);
            model.setNama(nama);
            model.setTanggalLahir(tanggalLahir);
            model.setTelepon(telepon);
            model.setEmail(email);
            try {
                model.updatePtik();
                JOptionPane.showMessageDialog(view, "Data berhasil dirubah");
                model.resetPtik();
            } catch (PtikException | HeadlessException throwable) {
                JOptionPane.showMessageDialog(view, new Object[]{
                    "Terjadi error pada database dengan pesan :",
                    throwable.getMessage()
                });
            } 
        }
    }

    public void deletePtik(PtikView view) {
        if (view.getTable().getSelectedRowCount() == 0) {
            JOptionPane.showMessageDialog(view, "Silahkan seleksi baris yang akan diubah");
            return;
        }
        if (JOptionPane.showConfirmDialog(view, "Anda yakin akan menghapus?") == JOptionPane.OK_OPTION) {
            Integer id = Integer.parseInt(view.getTextId().getText());
            model.setId(id);
            try {
                model.deletePtik();
                JOptionPane.showMessageDialog(view, "Identitas berhasil dihapus");
                model.resetPtik();
            } catch (PtikException | HeadlessException throwable) {
                JOptionPane.showMessageDialog(view, new Object[]{
                    "Terjadi error di database dengan pesan :",
                    throwable.getMessage()
                });
            }
        }
    }
}
